package javase2.day06.demo04;
/*
创建多线程的第二种方式：实现Runnable接口
    实现步骤：
        1.创建Runnable类的实现类
        2.重写其中的run方法，设置线程任务
        3.创建Runnable接口的实现类对象
        4.创建Thread对象，构造方法中传递Runnable接口的实现类对象
        5.调用start方法开启新线程

    两种方式的区别（第二种方式的优点）：
        1.避免单继承的局限性
            一个类只能继承一个类，继承了Thread就不能继承其他类
        2.增强了程序扩展性，降低了耦合性（解耦）
            实现Runnable接口的方式，把设置线程任务和开启线程进行了分离（解耦）
            创建Thread对象传递不同的Runnable实现类对象，start开启不同线程任务
 */
public class MoreThread2 {
    public static void main(String[] args) {
        //3.创建Runnable接口的实现类对象
        RunnableImpl runnable = new RunnableImpl();
        //4.创建Thread对象，构造方法中传递Runnable接口的实现类对象
        Thread thread = new Thread(runnable);
        thread.start();

        Thread thread1 = new Thread(new RunnableImpl2());
        thread1.start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+"主线程任务"+i);
        }

        //创建Thread对象传递不同的Runnable实现类对象，start开启不同线程任务
        /*
Thread-0线程任务0
Thread-0线程任务1
Thread-0线程任务2
Thread-0线程任务3
Thread-0线程任务4
Thread-0线程任务5
Thread-0线程任务6
Thread-0线程任务7
main主线程任务0
main主线程任务1
main主线程任务2
main主线程任务3
main主线程任务4
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
Thread-0线程任务8
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
传递不同Runnable实现类对象，start不同线程任务
......
         */
    }
}
